//给你一个整数数组 nums ，除某个元素仅出现 一次 外，其余每个元素都恰出现 三次 。请你找出并返回那个只出现了一次的元素。
//
//
//
// 示例 1：
//
//
//输入：nums = [2,2,3,2]
//输出：3
//
//
// 示例 2：
//
//
//输入：nums = [0,1,0,1,0,1,99]
//输出：99
//
//
//
//
// 提示：
//
//
// 1 <= nums.length <= 3 * 10⁴
// -2³¹ <= nums[i] <= 2³¹ - 1
// nums 中，除某个元素仅出现 一次 外，其余每个元素都恰出现 三次
//
//
//
//
// 进阶：你的算法应该具有线性时间复杂度。 你可以不使用额外空间来实现吗？
// Related Topics 位运算 数组 👍 793 👎 0

package leetcode.editor.cn;

@SuppressWarnings("all")
//Java：只出现一次的数字 II
public class 只出现一次的数字Ii {
    public static void main(String[] args) {
        Solution solution = new 只出现一次的数字Ii().new Solution();
        // TO TEST
        int[] nums = {-5};
        int res = solution.singleNumber(nums);
        System.out.println(res);
    }

    //leetcode submit region begin(Prohibit modification and deletion)
    class Solution {
        public int singleNumber(int[] nums) {

            int[] count = new int[32];
            for (int num : nums) {
                for (int i = 0; i < 32; i++) {
                    count[i] += num & 1;
                    num >>>= 1;
                }
            }

            int res = 0, m = 3;
            for (int i = 0; i < 32; i++) {
                res += (count[i] % 3) * (1 << i);
            }
            return res;


        }
    }
//leetcode submit region end(Prohibit modification and deletion)


}
